

<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
  <meta charset="utf-8" />
  <meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />

  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  
  <title>多活 MDS 守护进程的配置 &mdash; Ceph Documentation</title>
  

  
  <link rel="stylesheet" href="../../_static/ceph.css" type="text/css" />
  <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
  <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
  <link rel="stylesheet" href="../../_static/ceph.css" type="text/css" />
  <link rel="stylesheet" href="../../_static/graphviz.css" type="text/css" />
  <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" />

  
  

  
  

  

  
  <!--[if lt IE 9]>
    <script src="../../_static/js/html5shiv.min.js"></script>
  <![endif]-->
  
    
      <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
        <script src="../../_static/jquery.js"></script>
        <script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script>
        <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
        <script src="../../_static/doctools.js"></script>
        <script src="../../_static/sphinx_highlight.js"></script>
    
    <script type="text/javascript" src="../../_static/js/theme.js"></script>

    
    <link rel="index" title="Index" href="../../genindex/" />
    <link rel="search" title="Search" href="../../search/" />
    <link rel="next" title="CephFS 快照" href="../snapshots/" />
    <link rel="prev" title="目录分片的配置" href="../dirfrags/" /> 
</head>

<body class="wy-body-for-nav">

   
  <header class="top-bar">
    <div role="navigation" aria-label="Page navigation">
  <ul class="wy-breadcrumbs">
      <li><a href="../../" class="icon icon-home" aria-label="Home"></a></li>
          <li class="breadcrumb-item"><a href="../">Ceph 文件系统</a></li>
      <li class="breadcrumb-item active">多活 MDS 守护进程的配置</li>
      <li class="wy-breadcrumbs-aside">
            <a href="../../_sources/cephfs/multimds.rst.txt" rel="nofollow"> View page source</a>
      </li>
  </ul>
  <hr/>
</div>
  </header>
  <div class="wy-grid-for-nav">
    
    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
      <div class="wy-side-scroll">
        <div class="wy-side-nav-search"  style="background: #eee" >
          

          
            <a href="../../" class="icon icon-home"> Ceph
          

          
          </a>

          

          
<div role="search">
  <form id="rtd-search-form" class="wy-form" action="../../search/" method="get">
    <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
    <input type="hidden" name="check_keywords" value="yes" />
    <input type="hidden" name="area" value="default" />
  </form>
</div>

          
        </div>

        
        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
          
            
            
              
            
            
              <ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../../start/">Ceph 简介</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../install/">安装 Ceph</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../cephadm/">Cephadm</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../rados/">Ceph 存储集群</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../">Ceph 文件系统</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="../#cephfs">CephFS 入门</a></li>
<li class="toctree-l2"><a class="reference internal" href="../#id4">管理</a></li>
<li class="toctree-l2"><a class="reference internal" href="../#id5">挂载 CephFS</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="../#id6">CephFS 内幕</a><ul class="current">
<li class="toctree-l3"><a class="reference internal" href="../mds-states/"> MDS 的各种状态</a></li>
<li class="toctree-l3"><a class="reference internal" href="../posix/"> POSIX 兼容性</a></li>
<li class="toctree-l3"><a class="reference internal" href="../mds-journaling/"> MDS 日志记录</a></li>
<li class="toctree-l3"><a class="reference internal" href="../file-layouts/"> 文件布局</a></li>
<li class="toctree-l3"><a class="reference internal" href="../mdcache/"> 分布式元数据缓存</a></li>
<li class="toctree-l3"><a class="reference internal" href="../dynamic-metadata-management/"> CephFS 内的动态元数据管理</a></li>
<li class="toctree-l3"><a class="reference internal" href="../cephfs-io-path/"> CephFS IO 路径</a></li>
<li class="toctree-l3"><a class="reference internal" href="../charmap/"> 大小写敏感和规范化</a></li>
<li class="toctree-l3"><a class="reference internal" href="../lazyio/"> LazyIO</a></li>
<li class="toctree-l3"><a class="reference internal" href="../dirfrags/"> 目录分片的配置</a></li>
<li class="toctree-l3 current"><a class="current reference internal" href="#"> 多活 MDS 的配置</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#id1">什么情况下我需要多个活跃的 MDS 守护进程？</a></li>
<li class="toctree-l4"><a class="reference internal" href="#id2">MDS 活跃集群的扩容</a></li>
<li class="toctree-l4"><a class="reference internal" href="#id3">灾备守护进程</a></li>
<li class="toctree-l4"><a class="reference internal" href="#rank">减少 rank 数量</a></li>
<li class="toctree-l4"><a class="reference internal" href="#cephfs-pinning">手动将目录树插入特定的 rank</a></li>
<li class="toctree-l4"><a class="reference internal" href="#cephfs-ephemeral-pinning">设置子树分区策略</a></li>
<li class="toctree-l4"><a class="reference internal" href="#id6">动态子树分区</a></li>
<li class="toctree-l4"><a class="reference internal" href="#rank-balancer">在指定 rank 上用 balancer 进行动态子树分区</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../snapshots/"> 快照</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../#id7">故障排除和灾难恢复</a></li>
<li class="toctree-l2"><a class="reference internal" href="../#id9">更多细节</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../rbd/">Ceph 块设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../radosgw/">Ceph 对象网关</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../mgr/">Ceph 管理器守护进程</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../mgr/dashboard/">Ceph 仪表盘</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../monitoring/">监控概览</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../api/">API 文档</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../architecture/">体系结构</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../dev/developer_guide/">开发者指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../dev/internals/">Ceph 内幕</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../governance/">项目管理</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../foundation/">Ceph 基金会</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../ceph-volume/">ceph-volume</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../releases/general/">Ceph 版本（总目录）</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../releases/">Ceph 版本（索引）</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../security/">Security</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../hardware-monitoring/">硬件监控</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../glossary/">Ceph 术语</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../jaegertracing/">Tracing</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../translation_cn/">中文版翻译资源</a></li>
</ul>

            
          
        </div>
        
      </div>
    </nav>

    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">

      
      <nav class="wy-nav-top" aria-label="top navigation">
        
          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
          <a href="../../">Ceph</a>
        
      </nav>


      <div class="wy-nav-content">
        
        <div class="rst-content">
        
          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
           <div itemprop="articleBody">
            
<div id="dev-warning" class="admonition note">
  <p class="first admonition-title">Notice</p>
  <p class="last">This document is for a development version of Ceph.</p>
</div>
  <div id="docubetter" align="right" style="padding: 5px; font-weight: bold;">
    <a href="https://pad.ceph.com/p/Report_Documentation_Bugs">Report a Documentation Bug</a>
  </div>

  
  <section id="mds">
<span id="cephfs-multimds"></span><h1>多活 MDS 守护进程的配置<a class="headerlink" href="#mds" title="Permalink to this heading"></a></h1>
<p><em>也叫： multi-mds 、 active-active MDS</em></p>
<p>每个 CephFS 文件系统默认情况下都只配置一个活跃 MDS 守护进程。在大型系统中，为了扩展元数据性能你可以配置多个活跃的 MDS 守护进程，它们会共同承担元数据负载。</p>
<section id="id1">
<h2>什么情况下我需要多个活跃的 MDS 守护进程？<a class="headerlink" href="#id1" title="Permalink to this heading"></a></h2>
<p>当元数据默认的单个 MDS 成为瓶颈时，你应该配置多个活跃的 MDS 守护进程。</p>
<p>增加守护进程不一定都能提升性能，要看负载类型。典型地，
单个客户端上的单个应用程序就不会受益于 MDS 守护进程的增加，
除非这个应用程序是在并行地操作元数据。</p>
<p>通常，有很多客户端（操作着很多不同的目录时更好）时，
大量活跃的 MDS 守护进程有利于性能提升。</p>
</section>
<section id="id2">
<h2>MDS 活跃集群的扩容<a class="headerlink" href="#id2" title="Permalink to this heading"></a></h2>
<p>每一个 CephFS 文件系统都有自己的 <em>max_mds</em> 配置，
它控制着会创建多少 rank 。有空闲守护进程可接管新 rank 时，
文件系统 rank 的实际数量才会增加，
比如只有一个 MDS 守护进程运行着、 max_mds 被设置成了 2 ，
此时不会创建第二个 rank 。（注意，这样的配置不具备高可用性（HA），
因为没有备机能够接管失败的 rank 。
配置成这样时，集群会通过健康告警发牢骚）</p>
<p>把 <code class="docutils literal notranslate"><span class="pre">max_mds</span></code> 设置为想要的 rank 数量。在下面的例子里，
<code class="docutils literal notranslate"><span class="pre">ceph</span> <span class="pre">status</span></code> 输出的 fsmap 行是此命令可能输出的结果。</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># fsmap e5: 1/1/1 up {0=a=up:active}, 2 up:standby</span>

<span class="n">ceph</span> <span class="n">fs</span> <span class="nb">set</span> <span class="o">&lt;</span><span class="n">fs_name</span><span class="o">&gt;</span> <span class="n">max_mds</span> <span class="mi">2</span>

<span class="c1"># fsmap e8: 2/2/2 up {0=a=up:active,1=c=up:creating}, 1 up:standby</span>
<span class="c1"># fsmap e9: 2/2/2 up {0=a=up:active,1=c=up:active}, 1 up:standby</span>
</pre></div>
</div>
<p>新创建的 rank (1) 会从 creating 状态过渡到
active 状态。</p>
</section>
<section id="id3">
<h2>灾备守护进程<a class="headerlink" href="#id3" title="Permalink to this heading"></a></h2>
<p>即使拥有多活 MDS 守护进程，一个高可用系统<em>仍然需要灾备守护进程</em>来顶替失效的活跃守护进程。</p>
<p>因此，高可用系统的 <code class="docutils literal notranslate"><span class="pre">max_mds</span></code> 实际最大值比系统中 MDS 服务器的总数小一。</p>
<p>为了在多个服务器失效时仍能保持可用，
需增加系统中的灾备守护进程，
以弥补你能承受的服务器失效数量。</p>
</section>
<section id="rank">
<h2>减少 rank 数量<a class="headerlink" href="#rank" title="Permalink to this heading"></a></h2>
<p>减少 rank 数量和减少 <code class="docutils literal notranslate"><span class="pre">max_mds</span></code> 一样简单：</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># fsmap e9: 2/2/2 up {0=a=up:active,1=c=up:active}, 1 up:standby</span>
<span class="n">ceph</span> <span class="n">fs</span> <span class="nb">set</span> <span class="o">&lt;</span><span class="n">fs_name</span><span class="o">&gt;</span> <span class="n">max_mds</span> <span class="mi">1</span>
<span class="c1"># fsmap e10: 2/2/1 up {0=a=up:active,1=c=up:stopping}, 1 up:standby</span>
<span class="c1"># fsmap e10: 2/2/1 up {0=a=up:active,1=c=up:stopping}, 1 up:standby</span>
<span class="o">...</span>
<span class="c1"># fsmap e10: 1/1/1 up {0=a=up:active}, 2 up:standby</span>
</pre></div>
</div>
<p>集群将会自动逐步地停掉多余的 rank ，直到符合 <code class="docutils literal notranslate"><span class="pre">max_mds</span></code> 。</p>
<p>在 <a class="reference internal" href="../administration/"><span class="doc">CephFS 管理命令</span></a> 文档里有关于 <code class="docutils literal notranslate"><span class="pre">&lt;role&gt;</span></code> 格式的详细描述。</p>
<p>注意：被停掉的 rank 会先进入 stopping 状态，并持续一段时间，
在此期间它要把它分享的那部分元数据转手给仍然活跃着的 MDS 守护进程，
这个过程可能要持续数秒到数分钟。
如果这个 MDS 卡在了 stopping 状态，
那可能是触发了软件缺陷。</p>
<p>如果一个 MDS 守护进程正处于 <code class="docutils literal notranslate"><span class="pre">up:stopping</span></code> 状态时崩溃了、或是被杀死了，就会有一个灾备顶替它，而且集群的监视器们也会阻止停止此守护进程的尝试。</p>
<p>守护进程完成 stopping 状态后，它会自己重生并成为灾备。</p>
</section>
<section id="cephfs-pinning">
<span id="id4"></span><h2>手动将目录树插入特定的 rank<a class="headerlink" href="#cephfs-pinning" title="Permalink to this heading"></a></h2>
<p>在多活元数据服务器配置中，均衡器负责在集群内均匀地散布元数据负荷。此设计对大多数用户来说都够用了，
但是，有时人们想要跳过动态均衡器，
手动把某些元数据映射到特定的 rank ；这样一来，
管理员或用户就可以均匀地散布应用负荷、或者限制用户的元数据请求，
以防他影响整个集群。</p>
<p>为实现此目的，引入了一个机制，名为 <code class="docutils literal notranslate"><span class="pre">export</span> <span class="pre">pin</span></code> （导出销），是目录的一个扩展属性，名为 <code class="docutils literal notranslate"><span class="pre">ceph.dir.pin</span></code> 。用户可以用标准命令配置此属性：</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">setfattr</span> <span class="o">-</span><span class="n">n</span> <span class="n">ceph</span><span class="o">.</span><span class="n">dir</span><span class="o">.</span><span class="n">pin</span> <span class="o">-</span><span class="n">v</span> <span class="mi">2</span> <span class="n">path</span><span class="o">/</span><span class="n">to</span><span class="o">/</span><span class="nb">dir</span>
</pre></div>
</div>
<p>这个扩展属性的值是给这个目录树分配的 rank ，默认值 <code class="docutils literal notranslate"><span class="pre">-1</span></code> 表示此目录没有销进（某个 rank ）。</p>
<p>一个目录的导出销是从最近的、配置了导出销的父目录继承的；
同理，在一个目录上配置导出销会影响它的所有子目录。
然而，设置子目录的导出销可以覆盖从父目录继承来的销子，
例如：</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">mkdir</span> <span class="o">-</span><span class="n">p</span> <span class="n">a</span><span class="o">/</span><span class="n">b</span>
<span class="c1"># &quot;a&quot; and &quot;a/b&quot; both start without an export pin set</span>
<span class="n">setfattr</span> <span class="o">-</span><span class="n">n</span> <span class="n">ceph</span><span class="o">.</span><span class="n">dir</span><span class="o">.</span><span class="n">pin</span> <span class="o">-</span><span class="n">v</span> <span class="mi">1</span> <span class="n">a</span><span class="o">/</span>
<span class="c1"># a and b are now pinned to rank 1</span>
<span class="n">setfattr</span> <span class="o">-</span><span class="n">n</span> <span class="n">ceph</span><span class="o">.</span><span class="n">dir</span><span class="o">.</span><span class="n">pin</span> <span class="o">-</span><span class="n">v</span> <span class="mi">0</span> <span class="n">a</span><span class="o">/</span><span class="n">b</span>
<span class="c1"># a/b is now pinned to rank 0 and a/ and the rest of its children are still pinned to rank 1</span>
</pre></div>
</div>
</section>
<section id="cephfs-ephemeral-pinning">
<span id="id5"></span><h2>设置子树分区策略<a class="headerlink" href="#cephfs-ephemeral-pinning" title="Permalink to this heading"></a></h2>
<p>通过一系列 <strong>策略</strong> 配置起 <strong>自动化的</strong> 子树静态分区也是可以的。
在 CephFS 里，这种自动化的静态分区被称为
<strong>（临时挂单） ephemeral pinning</strong> 。
任何临时挂单的目录（ inode ）都会根据其
inode 号的一致性哈希值被自动分配到一个特定的 rank 。
所有这些临时挂单的目录都会统一地分布到所有 rank 上。</p>
<p>给临时挂单的目录这样命名是因为，一旦这个目录 inode
被缓存丢弃 pin 是不会持久化的。然而，
一个 MDS 的故障不会影响挂单目录们“临时”的天性。
MDS 在日志中记录了哪些子树是临时挂单的，
这样 MDS 的故障就不会丢失这个信息。</p>
<p>一个目录可以是临时挂单的，也可以不是。
挂单到哪个 rank 是通过它的 inode 号和一致性哈希决定的。
这意味着临时挂单的目录们大致均匀地散布在 MDS 集群中。
<strong>一致性哈希</strong> 也最小化了在 MDS 集群扩容或缩小时的重分布。
所以，扩容 MDS 集群后，无需管理介入就可以自动地增加你的元数据吞吐量。</p>
<p>目前，有两种类型的临时挂单：</p>
<p><strong>分布式的临时挂单</strong>: 这个策略会引起目录分片
（即使远低于常规分片阈值）、
并把它的分片作为临时挂单子树散布出去。
借助这个特性正好可以把直系子目录散布到一系列 MDS rank 上。
经典的应用案例就是 <code class="docutils literal notranslate"><span class="pre">/home</span></code> 目录：我们希望每个用户的家目录都被散布到整个 MDS 集群上。这样设置：</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><style type="text/css">
span.prompt1:before {
  content: "# ";
}
</style><span class="prompt1">setfattr<span class="w"> </span>-n<span class="w"> </span>ceph.dir.pin.distributed<span class="w"> </span>-v<span class="w"> </span><span class="m">1</span><span class="w"> </span>/cephfs/home</span>
</pre></div></div><p><strong>随机的临时挂单</strong>: 这个策略表面它下面的任意子目录分支都可以被临时挂单出去。
这是通过扩展属性 <code class="docutils literal notranslate"><span class="pre">ceph.dir.pin.random</span></code> 设置的，
值是允许挂单的目录百分比。例如：</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span class="prompt1">setfattr<span class="w"> </span>-n<span class="w"> </span>ceph.dir.pin.random<span class="w"> </span>-v<span class="w"> </span><span class="m">0</span>.5<span class="w"> </span>/cephfs/tmp</span>
</pre></div></div><p>这将使得任何被载入缓存的、或者在 <code class="docutils literal notranslate"><span class="pre">/tmp</span></code> 下创建的目录在 50% 的时间里都可以临时挂单。</p>
<p>建议你只设置很小的数值，像 <code class="docutils literal notranslate"><span class="pre">.001</span></code> 或 <code class="docutils literal notranslate"><span class="pre">0.1%</span></code> 。
子树太多的话会降低性能。正因为如此，
配置选项 <code class="docutils literal notranslate"><span class="pre">mds_export_ephemeral_random_max</span></code> 对这一比例的上限进行了规定（默认为 <code class="docutils literal notranslate"><span class="pre">.01</span></code> ）。
试图设置得高于此配置时 MDS 会返回 <code class="docutils literal notranslate"><span class="pre">EINVAL</span></code> 。</p>
<p>在 Octopus 版里，随机的和分布式的临时挂单策略默认都是关闭的。
此功能可以通过
<code class="docutils literal notranslate"><span class="pre">mds_export_ephemeral_random</span></code> 和 <code class="docutils literal notranslate"><span class="pre">mds_export_ephemeral_distributed</span></code>
配置选项来启用。</p>
<p>临时挂单可以覆盖父级导出的 pin ，反之亦然。
施行哪条策略遵循的规则是最近的父级：
如果一个比较近的父级目录有一条策略冲突，就用这一条。例如：</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span class="prompt1">mkdir<span class="w"> </span>-p<span class="w"> </span>foo/bar1/baz<span class="w"> </span>foo/bar2</span>
<span class="prompt1">setfattr<span class="w"> </span>-n<span class="w"> </span>ceph.dir.pin<span class="w"> </span>-v<span class="w"> </span><span class="m">0</span><span class="w"> </span>foo</span>
<span class="prompt1">setfattr<span class="w"> </span>-n<span class="w"> </span>ceph.dir.pin.distributed<span class="w"> </span>-v<span class="w"> </span><span class="m">1</span><span class="w"> </span>foo/bar1</span>
</pre></div></div><p><code class="docutils literal notranslate"><span class="pre">foo/bar1/baz</span></code> 这一目录就会被临时挂单，
因为 <code class="docutils literal notranslate"><span class="pre">foo/bar1</span></code> 策略覆盖了 <code class="docutils literal notranslate"><span class="pre">foo</span></code> 上的 export pin 。
<code class="docutils literal notranslate"><span class="pre">foo/bar2</span></code> 会正常地遵守 <code class="docutils literal notranslate"><span class="pre">foo</span></code> 上的 pin 。</p>
<p>对于相反的情况：</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span class="prompt1">mkdir<span class="w"> </span>-p<span class="w"> </span>home/<span class="o">{</span>patrick,john<span class="o">}</span></span>
<span class="prompt1">setfattr<span class="w"> </span>-n<span class="w"> </span>ceph.dir.pin.distributed<span class="w"> </span>-v<span class="w"> </span><span class="m">1</span><span class="w"> </span>home</span>
<span class="prompt1">setfattr<span class="w"> </span>-n<span class="w"> </span>ceph.dir.pin<span class="w"> </span>-v<span class="w"> </span><span class="m">2</span><span class="w"> </span>home/patrick</span>
</pre></div></div><p><code class="docutils literal notranslate"><span class="pre">home/patrick</span></code> 目录及其子目录会被插入 rank 2,
因为它的 export pin 覆盖了 <code class="docutils literal notranslate"><span class="pre">home</span></code> 上的策略。</p>
<p>要删除分区策略，删除相应的扩展属性或把它的值设为 0 。</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span class="prompt1">$<span class="w"> </span>setfattr<span class="w"> </span>-n<span class="w"> </span>ceph.dir.pin.distributed<span class="w"> </span>-v<span class="w"> </span><span class="m">0</span><span class="w"> </span>home</span>
<span class="prompt1"><span class="c1"># or</span></span>
<span class="prompt1">$<span class="w"> </span>setfattr<span class="w"> </span>-x<span class="w"> </span>ceph.dir.pin.distributed<span class="w"> </span>home</span>
</pre></div></div><p>对于导出的 pin ，可以删除其扩展属性、
或把它的值设置为 <cite>-1</cite> 。</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span class="prompt1">$<span class="w"> </span>setfattr<span class="w"> </span>-n<span class="w"> </span>ceph.dir.pin<span class="w"> </span>-v<span class="w"> </span>-1<span class="w"> </span>home</span>
</pre></div></div></section>
<section id="id6">
<h2>动态子树分区<a class="headerlink" href="#id6" title="Permalink to this heading"></a></h2>
<p>CephFS 很早就有了一个动态元数据均衡器（ dynamic metadata balancer ）
（有时称为 “默认均衡器”），它可以拆分或合并子树，
同时将它们放在“较冷”的 MDS rank 上。
通过这样移动元数据可以提高整个文件系统的吞吐量和缓存大小。</p>
<p>不过，均衡器有时效率不高或速度较慢，因此默认是关闭的。
这是为了避免管理员通过增大 <code class="docutils literal notranslate"><span class="pre">max_mds</span></code> 设置来“打开 multimds ”，
结果却发现均衡器把集群性能搞得一团糟
（从这种混乱状态恢复过来很简单，但需要一段时间）。</p>
<p>要打开均衡器，执行下列命令：</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span class="prompt1">ceph<span class="w"> </span>fs<span class="w"> </span><span class="nb">set</span><span class="w"> </span>&lt;fs_name&gt;<span class="w"> </span>balance_automate<span class="w"> </span><span class="nb">true</span></span>
</pre></div></div><p>最好在配置恰当后再开启均衡器，
例如包含 <code class="docutils literal notranslate"><span class="pre">bal_rank_mask</span></code>
（见 <a class="reference internal" href="#bal-rank-mask"><span class="std std-ref">below</span></a> ）的配置信息。</p>
<p>建议小心地监控文件系统性能和 MDS 。</p>
</section>
<section id="rank-balancer">
<h2>在指定 rank 上用 balancer 进行动态子树分区<a class="headerlink" href="#rank-balancer" title="Permalink to this heading"></a></h2>
<p id="bal-rank-mask">CephFS 文件系统用 <code class="docutils literal notranslate"><span class="pre">bal_rank_mask</span></code> 选项控制均衡器（ balancer ），
让它动态地重新均衡某一个活跃 MDS rank 中的子树（ subtree ）。
这样，管理员就可以在不同的活跃 MDS rank 中同时使用动态子树分区和静态固定（ static pining ）方案，
从而根据用户需求优化元数据负载。例如，在现实的云存储环境中，
大量子卷（ subvolume ）被分配给多个计算节点（如虚拟机和容器），
一些需要高性能的子卷由静态分区（ static partitioning ）管理，
而大部分工作量适中的子卷则由均衡器管理。
由于均衡器会把元数据工作载荷平均分配给所有活跃的 MDS rank ，
静态固定子卷的性能难免会受到影响或降级。
如果启用此选项，由均衡器管理的子卷不会受到静态固定子树的影响。</p>
<p>可以使用 <code class="docutils literal notranslate"><span class="pre">ceph</span> <span class="pre">fs</span> <span class="pre">set</span></code> 命令配置该选项。例如 ：</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span class="prompt1">ceph<span class="w"> </span>fs<span class="w"> </span><span class="nb">set</span><span class="w"> </span>&lt;fs_name&gt;<span class="w"> </span>bal_rank_mask<span class="w"> </span>&lt;hex&gt;</span>
</pre></div></div><p>数字 <code class="docutils literal notranslate"><span class="pre">&lt;hex&gt;</span></code> 的每个位字段对应一个指定的 rank 。如果 <code class="docutils literal notranslate"><span class="pre">&lt;hex&gt;</span></code> 设置为
<code class="docutils literal notranslate"><span class="pre">0x3</span></code> ，均衡器就会在活跃的 <code class="docutils literal notranslate"><span class="pre">0</span></code> 和 <code class="docutils literal notranslate"><span class="pre">1</span></code> rank 上运行。例如：</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span class="prompt1">ceph<span class="w"> </span>fs<span class="w"> </span><span class="nb">set</span><span class="w"> </span>&lt;fs_name&gt;<span class="w"> </span>bal_rank_mask<span class="w"> </span>0x3</span>
</pre></div></div><p>如果 <code class="docutils literal notranslate"><span class="pre">bal_rank_mask</span></code> 设置为 <code class="docutils literal notranslate"><span class="pre">-1</span></code> 或 <code class="docutils literal notranslate"><span class="pre">all</span></code> ，表示屏蔽所有 rank ，
均衡器可以使用所有 rank 。例如：</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span class="prompt1">ceph<span class="w"> </span>fs<span class="w"> </span><span class="nb">set</span><span class="w"> </span>&lt;fs_name&gt;<span class="w"> </span>bal_rank_mask<span class="w"> </span>-1</span>
</pre></div></div><p>相反，如果想要禁用均衡器，
<code class="docutils literal notranslate"><span class="pre">bal_rank_mask</span></code> 应该设置成 <code class="docutils literal notranslate"><span class="pre">0x0</span></code> 。例如：</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span class="prompt1">ceph<span class="w"> </span>fs<span class="w"> </span><span class="nb">set</span><span class="w"> </span>&lt;fs_name&gt;<span class="w"> </span>bal_rank_mask<span class="w"> </span>0x0</span>
</pre></div></div></section>
</section>



<div id="support-the-ceph-foundation" class="admonition note">
  <p class="first admonition-title">Brought to you by the Ceph Foundation</p>
  <p class="last">The Ceph Documentation is a community resource funded and hosted by the non-profit <a href="https://ceph.io/en/foundation/">Ceph Foundation</a>. If you would like to support this and our other efforts, please consider <a href="https://ceph.io/en/foundation/join/">joining now</a>.</p>
</div>


           </div>
           
          </div>
          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
        <a href="../dirfrags/" class="btn btn-neutral float-left" title="目录分片的配置" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
        <a href="../snapshots/" class="btn btn-neutral float-right" title="CephFS 快照" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
    </div>

  <hr/>

  <div role="contentinfo">
    <p>&#169; Copyright 2016, Ceph authors and contributors. Licensed under Creative Commons Attribution Share Alike 3.0 (CC-BY-SA-3.0).</p>
  </div>

   

</footer>
        </div>
      </div>

    </section>

  </div>
  

  <script type="text/javascript">
      jQuery(function () {
          SphinxRtdTheme.Navigation.enable(true);
      });
  </script>

  
  
    
   

</body>
</html>